/**
 * ESLint 配置文件 - Vue 3 + TypeScript Monorepo
 * 
 * 此配置适用于使用 Vue 3 + TypeScript 的 pnpm monorepo 项目
 * 支持 .js, .ts, .tsx, .vue 文件的代码规范检查
 * 
 * 主要特性：
 * - 支持 Vue 3 单文件组件
 * - 完整的 TypeScript 类型检查
 * - 现代 JavaScript 语法支持
 * - 生产环境优化规则
 */

import js from '@eslint/js'
import typescript from '@typescript-eslint/eslint-plugin'
import typescriptParser from '@typescript-eslint/parser'
import vue from 'eslint-plugin-vue'
import vueParser from 'vue-eslint-parser'

export default [
  // ==================== 基础配置 ====================
  // 使用 ESLint 推荐的 JavaScript 基础规则
  js.configs.recommended,
  
  // ==================== 全局忽略配置 ====================
  // 忽略不需要检查的文件和目录
  {
    ignores: [
      '**/node_modules/**',    // 依赖包目录
      '**/dist/**',           // 构建输出目录
      '**/build/**',          // 构建输出目录
      '**/.turbo/**',         // Turbo 缓存目录
      '**/coverage/**',       // 测试覆盖率报告
      '**/*.min.js',          // 压缩后的 JS 文件
      '**/pnpm-lock.yaml'     // pnpm 锁文件
    ]
  },

  // ==================== TypeScript 文件配置 ====================
  // 针对 .ts 和 .tsx 文件的特殊配置
  {
    files: ['**/*.ts', '**/*.tsx'],
    languageOptions: {
      // 使用 TypeScript 解析器
      parser: typescriptParser,
      parserOptions: {
        ecmaVersion: 'latest',        // 使用最新的 ECMAScript 版本
        sourceType: 'module',         // 使用 ES 模块
        project: './tsconfig.json'    // 指定 TypeScript 配置文件
      }
    },
    plugins: {
      '@typescript-eslint': typescript
    },
    rules: {
      // 继承 TypeScript 推荐规则
      ...typescript.configs.recommended.rules,
      
      // 自定义 TypeScript 规则
      '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], // 允许以下划线开头的未使用参数
      '@typescript-eslint/no-explicit-any': 'warn',  // 警告使用 any 类型
      '@typescript-eslint/prefer-const': 'error'     // 强制使用 const
    }
  },

  // ==================== Vue 文件配置 ====================
  // 针对 .vue 单文件组件的特殊配置
  {
    files: ['**/*.vue'],
    languageOptions: {
      // 使用 Vue 解析器
      parser: vueParser,
      parserOptions: {
        parser: typescriptParser,     // 在 Vue 文件中使用 TypeScript 解析器
        ecmaVersion: 'latest',        // 使用最新的 ECMAScript 版本
        sourceType: 'module'          // 使用 ES 模块
      }
    },
    plugins: {
      vue,                            // Vue 插件
      '@typescript-eslint': typescript // TypeScript 插件
    },
    rules: {
      // 继承 Vue 3 推荐规则
      ...vue.configs['vue3-recommended'].rules,
      
      // 自定义 Vue 规则
      'vue/multi-word-component-names': 'off',        // 允许单词组件名
      'vue/no-v-html': 'warn',                       // 警告使用 v-html
      'vue/require-default-prop': 'off',             // 不要求 prop 默认值
      'vue/require-explicit-emits': 'error'          // 要求显式声明 emits
    }
  },

  // ==================== 通用规则配置 ====================
  // 适用于所有文件的通用规则
  {
    rules: {
      // 生产环境相关规则
      'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',  // 生产环境警告 console
      'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 生产环境警告 debugger
      
      // 代码质量规则
      'prefer-const': 'error',        // 优先使用 const
      'no-var': 'error',             // 禁止使用 var
      'object-shorthand': 'error',   // 强制对象简写
      'prefer-template': 'error'     // 优先使用模板字符串
    }
  }
]
